﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace TrocaFigurinhas.Models.BusinessLayer
{
    public class OfertasTrocasBL
    {
        private ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer();

        public OfertaTrocaModel casarComDesejadas(string user, Ofertas oferta)
        {
            OfertaTrocaModel trocaPossivel = new OfertaTrocaModel();
            var nomesFigurinhas = oferta.FigurinhasSolicitante.Select<FigurinhasSolicitante,string>(a => a.Figurinha.Nome);
            string[] nomes = nomesFigurinhas.ToArray();

            var ofertas =  from Oferta      in contexto.OfertasSet
                           join Solicitado  in contexto.FigurinhasSolicitadoSet 
                             on Oferta.Id equals Solicitado.OfertasId
                           where nomes.Contains(Solicitado.Figurinha.Nome)
                         select Oferta;

            ofertas = ofertas.Where(a => a.TrocaSolicitante == null || !a.TrocaSolicitante.TrocaRealizada); // Ainda não houve trocas efetivas

            trocaPossivel.MinhasOfertas = ofertas.ToList<Ofertas>();
            trocaPossivel.permiteTroca = trocaPossivel.MinhasOfertas.Count>0;
            trocaPossivel.Oferta = oferta;

            return trocaPossivel;
        }

        public OfertaTrocaModel casarComOfertadas(string user, Ofertas oferta)
        {
            OfertaTrocaModel trocaPossivel = new OfertaTrocaModel();
            var nomesFigurinhas = oferta.FigurinhasSolicitado.Select<FigurinhasSolicitado, string>(a => a.Figurinha.Nome);
            string[] nomes = nomesFigurinhas.ToArray();

            var ofertas = from Oferta in contexto.OfertasSet
                          join Ofertado in contexto.FigurinhasSolicitanteSet
                            on Oferta.Id equals Ofertado.OfertasId
                          where nomes.Contains(Ofertado.Figurinha.Nome)
                          select Oferta;

            ofertas = ofertas.Where(a => a.TrocaSolicitante == null || !a.TrocaSolicitante.TrocaRealizada); // Ainda não houve trocas efetivas
            
            trocaPossivel.MinhasOfertas = ofertas.ToList<Ofertas>();
            trocaPossivel.permiteTroca = trocaPossivel.MinhasOfertas.Count > 0;
            trocaPossivel.Oferta = oferta;

            return trocaPossivel;
        }
    }
}